import { ElMessage } from 'element-plus'

/**
 * 内容编辑管理 composable
 * 处理各种内容编辑器相关的业务逻辑
 */
export function useContentEditor({
  // UI状态相关
  currentViewItem,
  showContentViewDialog,
  showContentEditor,
  currentEditItem,
  showMarkdownEditor,
  activeTab,
  closeMarkdownEditor,
  closeItemForm,
  
  // 数据操作相关
  saveItem,
  fetchAllData
}) {
  
  // 内容查看相关方法
  const viewItemContent = (item) => {
    currentViewItem.value = item
    showContentViewDialog.value = true
    showContentEditor.value = false
  }

  const openContentEditor = () => {
    showContentEditor.value = true
  }

  const closeContentEditor = () => {
    showContentEditor.value = false
  }

  const saveItemContent = async () => {
    if (!currentViewItem.value) return
    
    try {
      const formData = {
        id: currentViewItem.value.id,
        name: currentViewItem.value.name,
        description: currentViewItem.value.description,
        icon: currentViewItem.value.icon,
        content_type: currentViewItem.value.content_type,
        api_endpoint: currentViewItem.value.api_endpoint,
        page_path: currentViewItem.value.page_path,
        status: currentViewItem.value.status,
        content: currentViewItem.value.content
      }
      await saveItem(formData)
      closeContentEditor()
    } catch (error) {
      console.error('内容保存失败:', error)
    }
  }

  const viewItemContentFromForm = (itemForm, editingItem) => {
    // 从编辑表单中获取当前项目数据
    const currentItem = {
      ...itemForm,
      id: itemForm.id || editingItem.value?.id
    }
    
    // 关闭编辑表单
    closeItemForm()
    
    // 打开内容查看对话框
    currentViewItem.value = currentItem
    showContentViewDialog.value = true
    showContentEditor.value = false
  }

  // 从编辑表单打开Markdown编辑器
  const editMarkdownContent = (itemForm, editingItem) => {
    // 从编辑表单中获取当前项目数据
    const currentItem = {
      ...itemForm,
      id: itemForm.id || editingItem.value?.id
    }
    
    // 关闭编辑表单
    closeItemForm()
    
    // 打开独立的Markdown编辑页面
    currentEditItem.value = currentItem
    showMarkdownEditor.value = true
  }

  // 从项目列表打开Markdown编辑器
  const editItemMarkdown = (item) => {
    currentEditItem.value = { ...item }
    showMarkdownEditor.value = true
  }

  // 从编辑表单打开富文本编辑器
  const editRichTextContent = (itemForm, editingItem) => {
    // 从编辑表单中获取当前项目数据
    const currentItem = {
      ...itemForm,
      id: itemForm.id || editingItem.value?.id
    }
    
    // 关闭编辑表单
    closeItemForm()
    
    // 设置当前编辑项目数据
    currentEditItem.value = currentItem
    
    // 跳转到 Quill 编辑器页面
    activeTab.value = 'quill-editor'
    
    // 确保其他编辑器状态为关闭
    showMarkdownEditor.value = false
  }

  /**
   * 从项目列表打开富文本编辑器
   * @param {Object} item - 要编辑的项目对象
   */
  const editItemRichText = (item) => {
    console.log('editItemRichText - 接收到的项目数据:', item)
    
    // 设置当前编辑项目数据
    currentEditItem.value = { ...item }
    
    // 跳转到 Quill 编辑器页面
    activeTab.value = 'quill-editor'
    
    // 确保其他编辑器状态为关闭
    showMarkdownEditor.value = false
    
    console.log('editItemRichText - 已跳转到 Quill 编辑器，当前编辑项目:', currentEditItem.value)
  }

  // 保存Markdown内容
  const saveMarkdownContent = async () => {
    if (!currentEditItem.value) return

    try {
      // 根据是否有id判断是编辑还是创建
      const isEdit = !!currentEditItem.value?.id
      await saveItem(currentEditItem.value, isEdit)
      closeMarkdownEditor()
      // 刷新数据
      await fetchAllData()
    } catch (error) {
      console.error('Markdown内容保存失败:', error)
    }
  }

  /**
   * 保存当前编辑项目内容
   * @param {Object} richTextData - 富文本数据对象，包含html、text、delta等字段
   */
  const saveCurrentEditItem = async (richTextData) => {
    if (!currentEditItem.value) return

    try {
      // 保存当前编辑项目的引用，避免在数据刷新时丢失
      const currentItemBackup = { ...currentEditItem.value }
      
      // 如果接收到富文本数据，更新currentEditItem的content
      if (richTextData && richTextData.html) {
        currentEditItem.value.content = richTextData.html
        currentEditItem.value.content_type = 'rich_text'
        // 同时更新备份数据
        currentItemBackup.content = richTextData.html
        currentItemBackup.content_type = 'rich_text'
      }
      
      // 根据是否有id判断是编辑还是创建
      const isEdit = !!currentEditItem.value?.id
      await saveItem(currentEditItem.value, isEdit)
      ElMessage.success('内容已保存')
      
      // 刷新数据但保持编辑器状态
      await fetchAllData()
      
      // 恢复当前编辑项目的状态，确保编辑器内容不被清空
      currentEditItem.value = currentItemBackup
    } catch (error) {
      ElMessage.error('保存失败')
    }
  }

  /**
   * 处理 Quill 编辑器保存内容
   * @param {Object} richTextData - 富文本数据对象，包含html、text、delta等字段
   */
  const handleQuillSaveContent = async (richTextData) => {
    if (!currentEditItem.value) return

    try {
      // 将富文本数据序列化为JSON字符串保存到content字段
      if (richTextData) {
        const contentData = {
          html: richTextData.html || '',
          text: richTextData.text || '',
          delta: richTextData.delta || null,
          mode: 'rich_text'
        }
        currentEditItem.value.content = JSON.stringify(contentData)
      }
      
      // 设置内容类型为富文本
      currentEditItem.value.content_type = 'rich_text'
      
      // 根据是否有id判断是编辑还是创建
      const isEdit = !!currentEditItem.value?.id
      await saveItem(currentEditItem.value, isEdit)
      
      ElMessage.success('富文本内容已保存')
      
      // 刷新数据
      await fetchAllData()
      
      // 不自动跳转，让用户手动点击返回按钮
      // activeTab.value = 'items'
      // currentEditItem.value = null
    } catch (error) {
      console.error('富文本内容保存失败:', error)
      ElMessage.error('保存失败')
    }
  }

  /**
   * 处理 Quill 编辑器取消编辑
   */
  const handleQuillCancelEdit = () => {
    // 返回项目管理页面
    activeTab.value = 'items'
    currentEditItem.value = null
    ElMessage.info('已取消编辑')
  }

  return {
    viewItemContent,
    openContentEditor,
    closeContentEditor,
    saveItemContent,
    viewItemContentFromForm,
    editMarkdownContent,
    editItemMarkdown,
    editRichTextContent,
    editItemRichText,
    saveMarkdownContent,
    saveCurrentEditItem,
    handleQuillSaveContent,
    handleQuillCancelEdit
  }
}